package util;

import dao.ConfigSistemaDao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import modelo.ConfigSistema;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;

/**
 *
 * @author gilberto.costa 02/01/2012 14:04
 */
public class Relatorios {

    static Connection con = Utilitario.conetaBanco();
    private static ConfigSistema conf = ConfigSistemaDao.retornaConfigSistemaPorId(1L);

    public static void geraRecibos(String opcao, String ids_separadosPorVirgula) throws SQLException {
        String dirRelatorio = null;
        if (conf != null) {
            dirRelatorio = conf.getDirRelatorios();
        }
        JasperPrint rel;
        try {
            //select do relatorio
            String sql = "SELECT  c.*,f.*,r.*,cp.cep as numCep,cp.bairro,cp.cidade,cp.logradouro,cp.tp_logradouro,cp.uf from clientes c,funcionarios f, recibos r,cep cp where cep_id = cp.id and r.cliente = c.id_cliente AND c.id_funcionario = f.id_func AND r.id in(";
//                        SELECT * from clientes c,funcionarios f, recibos r where r.cliente = c.id_cliente AND c.id_funcionario = f.id_func AND r.id in(3,4,5,6,7,8,9)
            String concatena = ",";
            Integer cont = 0;
            String[] teste = ids_separadosPorVirgula.split(",");
            for (int x = 0; x < teste.length; x++) {
                if (cont == 0) {
                    sql = sql + teste[x];
                } else {
                    sql = sql + concatena + teste[x];
                }
                cont++;
            }
            //executa o select
            Connection conn = Utilitario.conetaBanco();
            PreparedStatement stmt = conn.prepareStatement(sql + ") order by r.datavencimento");
            ResultSet rs = stmt.executeQuery();

            Map map = new HashMap();
            map.put("Logo", dirRelatorio + "logo.jpg");
            String arquivoJasper = dirRelatorio + "Recibo.jasper";
//            String arquivoJasper = dirRelatorio + "ReciboFont2.jasper";
            rel = JasperFillManager.fillReport(arquivoJasper, map, new JRResultSetDataSource(rs));
            if (opcao.equalsIgnoreCase("imprimir")) {
                JasperPrintManager.printReport(rel, true);
            } else {
                JasperViewer.viewReport(rel, false);
            }
        } catch (JRException e) {
            JOptionPane.showMessageDialog(null, "Erro ao gerar relatorio: " + e);
        }
    }

    public static void geraRelatorioDetalhadoEntreDatas(String opcao, Date dataInicio, Date dataFinal) {
        String dirRelatorio = null;
        if (conf != null) {
            dirRelatorio = conf.getDirRelatorios();
        }
        JasperPrint rel;
        try {
            Map map = new HashMap();
            map.put("Data_Inicio", dataInicio);
            map.put("Data_Fim", dataFinal);
            String arquivoJasper = dirRelatorio + "/relatoriovendas/RelVendaDatalhadaPorData.jasper";
            rel = JasperFillManager.fillReport(arquivoJasper, map, con);
            if (opcao.equalsIgnoreCase("imprimir")) {
                JasperPrintManager.printReport(rel, true);
            } else {
                JasperViewer.viewReport(rel, false);
            }
        } catch (JRException e) {
            JOptionPane.showMessageDialog(null, "Erro ao gerar relatorio : " + e);
        }
    }
}